package generic;

/**
 * Creared with IntelliJ IDEA.
 * Description:
 * User:yxd
 * Date:2022-02-20
 * Time:15:27
 */
//写一个泛型类，来求出泛型数组的最大值
class Alg<T extends Comparable<T>>{//此时的T一定要实现Comparable接口，Object并没有实现这个接口 这个也算是特殊的上界
    // 这里可以不认为是继承相当于拓展，T实现了这个接口
    public T findMax(T[] array){
        T max = array[0];
        for (int i = 0; i < array.length; i++) {
            //此时就不能使用正常的大于号小于号来比较大小了而应该使用compareTo方法来比较因为这里的类型可以是任何类型
            if(max.compareTo(array[i]) < 0){
                max = array[i];
            }
        }
        return max;
    }
}
class Alg2{
    public static <T extends Comparable<T>> T findMax(T[] array){//泛型方法，此时是一个静态方法，就不需要在new对象了可以直接使用
        T max = array[0];
        for (int i = 0; i < array.length; i++) {

            if(max.compareTo(array[i]) < 0){
                max = array[i];
            }
        }
        return max;
    }
}
public class Parallel {
    public static void main(String[] args) {
        Alg<Integer> alg = new Alg<>();//String 也可以比较
        Integer[] array = {1,5,7,4,8,3};
        System.out.println(alg.findMax(array));
        System.out.println(Alg2.findMax(array));//不需要在实例化对象了
        //System.out.println(Alg2.<Integer>findMax(array));此时可以指定类型也可以不用指定，通过你给的数组就可以推出来
    }


}
